package com.cskaoyan.javase.oop1._13block._2static;

/**
 * 静态代码块:
 * 语法: statics{}
 * 定义位置: 类体中的成员位置
 * 作用:
 *      随着类加载的过程而执行，静态代码块可以看成是一个在类加载过程中，会自动调用的静态方法！用于给静态成员变量赋值！
 *      在类加载某个类的过程中,存在该类的clinit方法栈帧进栈
 *      clinit方法就主要执行以下两类代码:
 *          1.静态成员变量的显式赋值
 *          2.静态代码块中代码
 *
 *      总结类加载过程中,静态成员变量的赋值手段:
 *         1.默认初始化,具有默认值
 *         2.显式赋值
 *         3.静态代码块赋值
 *      默认初始化永远最先执行,显式赋值和静态代码块赋值按照代码书写顺序从上到下执行
 *
 *      静态代码块的执行原理,和编译器的设计关系不大
 *      主要是因为类加载的机制保证的
 *
 *      类加载只有一次,静态代码块在类的全局,最多执行一次.
 *
 * @since 17:51
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(Student.num);
    }
}

class Student {


    static int num = 10;

    static {
        num = 20;
    }


}
